// 引入 node-cron 库
const cron = require('node-cron');

const {  backupDatabase }  = require('../../src/db/init'); // 数据库初始化

const atRegularTime = () => {
    // 最基本的每分钟执行任务
    cron.schedule('* * * * *', () => {
    });
    // 每个小时执行一次
    cron.schedule('1 * * * *', () => {
        // accessStatisticsFromSql().then(() => {
        //     cleanUpOldData();// 清理旧数据(每天)
        // })
    })
    // 每天凌晨0点一秒执行
    cron.schedule('1 0 0 * * *', () => {
        backupDatabase();// 备份数据库(每天)
    })
    // 每月1号凌晨0点一秒执行
    cron.schedule('1 2 0 1 * *', () => {
        // generateMonthlyStatistics()
    })
    // // 2. 每小时的第30分钟执行
    // cron.schedule('30 * * * *', () => {
    //     console.log(`[定时执行] 每小时的第30分钟执行，当前时间: ${new Date().toLocaleString()}`);
    // });
    // // 3. 带错误处理的任务
    // cron.schedule('*/2 * * * *', () => {
    //     try {
    //         console.log(`[错误处理] 每2分钟执行，模拟随机错误...`);

    //         // 模拟随机错误（50%概率）
    //         if (Math.random() > 0.2) {
    //             throw new Error('随机错误发生！');
    //         }

    //         console.log('✅ 本次执行成功');
    //     } catch (err) {
    //         console.error('❌ 任务执行失败:', err.message);
    //     }
    // });

    // // 4. 带参数的任务（通过闭包）
    // function createTask(taskName) {
    //     return cron.schedule('*/5 * * * *', () => {
    //         console.log(`[带参数任务] ${taskName} 每5分钟执行，当前时间: ${new Date().toISOString()}`);
    //     });
    // }

    // createTask('数据备份任务');

    // // 5. 控制任务启停
    // let counter = 0;
    // const limitedTask = cron.schedule('* * * * *', () => {
    //     console.log(`[可停止任务] 已执行 ${++counter} 次`);

    //     if (counter >= 3) {
    //         console.log('已达到最大执行次数，停止任务');
    //         limitedTask.stop(); // 停止任务
    //     }
    // });

    // // 6. 复杂时间规则（工作日早上9点-18点每小时执行）
    // cron.schedule('0 9-18 * * 1-5', () => {
    //     console.log(`[复杂规则] 工作日工作时间执行，当前时间: ${new Date().toLocaleString()}`);
    // }, {
    //     scheduled: true,
    //     timezone: "Asia/Shanghai" // 指定时区
    // });
};
module.exports = atRegularTime;